package cn.goktech.controller;

import cn.goktech.bean.Person;
import cn.goktech.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.SessionAttribute;
import org.springframework.web.bind.annotation.SessionAttributes;
import org.springframework.web.servlet.ModelAndView;

import javax.validation.Valid;
import java.util.List;

@Controller
@SessionAttributes("user")
public class PersonController {
    /*
    *JSR303数据校验的开发顺序：
    * 1、导入依赖，在配置文件中配置jsr的bean标签
    * 2、封装javabean，在需要校验的属性前标注对应校验注解标签、message
    * 3、在方法参数中对该javabean的参数前加上@Valid,会自动进行数据据校验
    *4、应用场景：类似与注册场景中，会有数据校验，需要在界面中回显校验的提示信息，可以借助springmvc中form：form
    *
    * Springmvc的Form表单：
    *
    * 1、form表单属性：	modelAttribute 属性：  form绑定的模型属性名称
    * 2、错误信息标签：form:errors  可以获取jsr数据校验的提示信息
    * 3、在各个标签中通过path属性直接跟form绑定的模型对象中各个属性对应即可
    * */



    @RequestMapping("/Toregister")
    public String testJsrc2() {
        return "register";
    }

    @RequestMapping("/register")
    public ModelAndView testJsrc(@Valid Person person, BindingResult result, ModelAndView mav) {
        //判断jsr校验是否有错
        if (result.hasErrors()) {
            List<FieldError> fieldErrors = result.getFieldErrors();
            //获取错误信息
            //迭代每一条错误信息获取不符合校验的字段和提示信息
            for (FieldError fieldError : fieldErrors) {
                String field = fieldError.getField();
                System.out.println("field = " + field);
                String message = fieldError.getDefaultMessage();
                System.out.println("message=" + message);

            }
            mav.addObject("person", person);
            mav.setViewName("register");
            return mav;
        }
        //模拟登录
        User user = new User();
        mav.addObject("user", user);
        mav.setViewName("success");
        return mav;
    }

    @RequestMapping("/Toregister4")
    public String testJsrc4(Model model) {
        Person person = new Person();
        model.addAttribute("person", person);
        return "registerBySpringFom";
    }

    @RequestMapping("/register3")
    public ModelAndView testJsrc3(@Valid Person person, BindingResult result, ModelAndView mav) {
        //判断jsr校验是否有错
        if (result.hasErrors()) {
            List<FieldError> fieldErrors = result.getFieldErrors();
            //获取错误信息
            //迭代每一条错误信息获取不符合校验的字段和提示信息
            for (FieldError fieldError : fieldErrors) {
                String field = fieldError.getField();
                System.out.println("field = " + field);
                String message = fieldError.getDefaultMessage();
                System.out.println("message=" + message);

            }
            mav.addObject("person", person);
            mav.setViewName("registerBySpringFom");
            return mav;
        }
        //模拟登录
        User user = new User();
        mav.addObject("user", user);
        mav.setViewName("success");
        return mav;
    }
}
